package priv.pattern.singletonpattern;

/*
 * 作者：m鹏h
 * 时间；2024/6/5 21:47
 * 描述：单列模式 懒汉式 （双重校验锁）
 **/
public class LazySingletonCheckLock {
    private volatile static LazySingletonCheckLock lazySingletonCheckLock;
    /*
     * 原理：通过双重检查锁定（DCL）来减少同步的开销。只有当instance为null时，才进行同步块的加锁操作。
       注意：在Java 1.5以前的版本中，双重检查锁定由于JVM的内存模型原因可能会出现问题，但在Java 1.5及以上版本中，通过volatile关键字和内存模型的改进，双重检查锁定已经被正确地实现。
       优点：线程安全，且效率较高。
       缺点：实现相对复杂，容易出错。
     * @author M鹏H
     * date 2024/6/5
     **/

    private LazySingletonCheckLock() {
    }

    ;

    public static LazySingletonCheckLock getLazySingletonCheckLock() {
        if (lazySingletonCheckLock == null) {
            synchronized (LazySingletonCheckLock.class) {
                if (lazySingletonCheckLock == null) {
                    lazySingletonCheckLock = new LazySingletonCheckLock();
                }
            }
        }
        return lazySingletonCheckLock;
    }
}
